import object_template from "./object_template.mjs";
import route_template from "./route_template.mjs";
import select_template from "./select_template.mjs";
import string_template from "./string_template.mjs";
import { nearest_data, nearest_param } from "./nearest.mjs";
import ajax_template from "./ajax_template.mjs";
import gridview_template from "../gridview/gridview_template.mjs";
import if_template from "./if_template.mjs";
import tab_template from "./tab_template.mjs";
import formview_template from "./formview_template.mjs";
import formviewitem_template from "./formviewitem_template.mjs";
import input_template from "./input_template.mjs";
import field_template from "./field_template.mjs";
import switch_template from "./switch_template.mjs";
import pager_template from "./pager_template.mjs";
import { datalist_template } from "./datalist.mjs";
import textarea_template from "./textarea_template.mjs";
import worksheet_template from "./worksheet_template.mjs";
import { lazyload_template } from "./lazyload.mjs";
import { lazyloadlist_template } from "./lazyloadlist.mjs";
import menu_template from "./menu_template.mjs";
import foreach_template from "./foreach_template.mjs";
import { multiview_template } from "./multiview_template.mjs";
import { multiselect_template } from "./multiselect_template.mjs";
import explorer_template from "../explorer/explorer_template.mjs";
import { fontawesome_template } from "./fontawesome_template.mjs";
import jsonschema_template from "../jsonschema/jsonschema_template.mjs";
import wizard_template from "../wizard/wizard_template.mjs";
// 存储扩展模板
export let template_ext = {};

/**
 * 核心渲染函数
 * @param {HTMLElement} container - 容器元素
 * @param {*} template - 模板定义
 */
export default function thin_render(container, template) {
  // 处理未定义的模板
  if (template === undefined) {
    console.warn("no template");
  }
  // 处理数组类型的模板，递归渲染每个元素
  else if (Array.isArray(template)) {
    template.forEach((t) => {
      thin_render(container, t);
    });
  }
  // 处理字符串类型的模板
  else if (typeof template === "string") {
    string_template(container, template);
  }
  // 处理函数类型的模板
  else if (typeof template === "function") {
    let result = template({
      container: container,
      data: nearest_data(container), // 获取最近的数据上下文
      param: nearest_param(container), // 获取最近的参数上下文
    });
    if (result !== undefined) {
      thin_render(container, result);
    }
  }
  // 处理对象类型的模板
  else {
    // 获取模板类型（对象的第一个键）
    let key = Object.keys(template)[0];

    // 根据不同的模板类型调用相应的处理函数
    switch (key) {
      case "wizard": // 向导模板
        wizard_template({ container, template });
        break;
      case "jsonschema": // jsonschema模板
        jsonschema_template({ container, template });
        break;
      case "fa": // 字体图标模板
        fontawesome_template({ container, template });
        break;

      case "multiview": // 多视图模板
        multiview_template({ container, template });
        break;
      case "explorer": // 资源管理器模板
        explorer_template({ container, template });
        break;
      case "lazyload": // 懒加载模板
        lazyload_template({ container, template });
        break;
      case "lazyloadlist": // 懒加载列表模板
        lazyloadlist_template({ container, template });
        break;
      case "datalist": // 数据列表模板
        datalist_template(container, template);
        break;
      case "worksheet": // 工作表模板
        worksheet_template(container, template);
        break;
      case "gridview": // 网格视图模板
        gridview_template(container, template);
        break;
      case "formview": // 表单视图模板
        formview_template(container, template);
        break;
      case "block": // 表单项块模板
      case "f1": // 表单项类型1
      case "f2": // 表单项类型2
      case "f3": // 表单项类型3
        formviewitem_template(container, template);
        break;
      case "field": // 字段模板
        field_template(container, template);
        break;
      case "tab": // 标签页模板
        tab_template(container, template);
        break;
      case "route": // 路由模板
        route_template(container, template);
        break;
      case "menu": // 菜单模板
        menu_template({ container, template });
        break;
      case "ajax": // AJAX请求模板
        ajax_template(container, template);
        break;
      case "foreach": // 循环遍历模板
        foreach_template(container, template);
        break;
      case "switch": // 条件切换模板
        switch_template(container, template);
        break;
      case "if": // 条件判断模板
        if_template(container, template);
        break;
      case "pager": // 分页模板
        pager_template(container, template);
        break;
      case "select": // 选择框模板
        select_template(container, template);
        break;
      case "textarea": // 文本域模板
        textarea_template(container, template);
        break;
      case "input": // 输入框模板
        input_template(container, template);
        break;
      case "multiselect": // 多选模板
        multiselect_template({ container, template });
        break;
      default:
        // 处理扩展模板或默认对象模板
        if (template_ext[key])
          template_ext[key]({
            container,
            template,
            data: nearest_data(container),
          });
        else object_template(container, template);
        break;
    }
  }
}
